This library safely implements WebGPU on native platforms.
It is designed for integration into browsers, as well as wrapping
into other language-specific user-friendly libraries.
## Feature flags
- **`api_log_info`** --- Log all API entry points at info instead of trace level.
- **`resource_log_info`** --- Log resource lifecycle management at info instead of trace level.
- **`link`** _(enabled by default)_ --- Use static linking for libraries. Disale to manually
link. Enabled by default.
- **`renderdoc`** --- Support the Renderdoc graphics debugger:
[https://renderdoc.org/](https://renderdoc.org/)
- **`strict_asserts`** --- Apply run-time checks, even in release builds. These are in addition
to the validation carried out at public APIs in all builds.
- **`trace`** --- Enable API tracing.
- **`replay`** --- Enable API replaying
- **`serial-pass`** --- Enable serializable compute/render passes, and bundle encoders.
- **`wgsl`** --- Enable `ShaderModuleSource::Wgsl`
- **`fragile-send-sync-non-atomic-wasm`** --- Implement `Send` and `Sync` on Wasm, but only if
atomics are not enabled.
WebGL/WebGPU objects can not be shared between threads. However, it can be useful to
artificially mark them as `Send` and `Sync` anyways to make it easier to write cross-platform
code. This is technically _very_ unsafe in a multithreaded environment, but on a wasm binary
compiled without atomics we know we are definitely not in a multithreaded environment.
### Backends, passed through to wgpu-hal
- **`metal`** --- Enable the `metal` backend.
- **`vulkan`** --- Enable the `vulkan` backend.
- **`gles`** --- Enable the `GLES` backend.
This is used for all of GLES, OpenGL, and WebGL.
- **`dx12`** --- Enable the `dx12` backend.